﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;
using CustomListView = PortalCurriculo.Util.CustomControls.ListView;

namespace PortalCurriculo.WebUI.Empresas
{
    public partial class CadastroSelecionador : CompanyAccessHelper
    {
        private static List<SelecionadorPreCadastro> SelecionadoresPendentes { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            SelecionadoresPendentes = new SelecionadorPreCadastro { IdEmpresa = EmpresaLogada.Id }.SelecionarLista();

            lsvSelecionadorPendente.DataSource = SelecionadoresPendentes;
            lsvSelecionadorPendente.DataBind();

            lsvSelecionador.DataSource = new SelecionadorEmpresa { IdEmpresa = EmpresaLogada.Id }.SelecionarLista();
            lsvSelecionador.DataBind();
        }

        protected void lsvSelecionadorPendente_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var selecionadorPreCadastro = (SelecionadorPreCadastro)item.DataItem;

            var nome = (Label)item.FindControl("lblNome");
            var email = (Label)item.FindControl("lblEmail");
            var cpf = (Label)item.FindControl("lblCPF");
            var excluir = (ImageButton)item.FindControl("imbExcluir");
            var enviarEmail = (ImageButton)item.FindControl("imbEnviarEmail");

            nome.Text = selecionadorPreCadastro.Nome;
            cpf.Text = selecionadorPreCadastro.CPF;
            email.Text = selecionadorPreCadastro.Email;
            excluir.Attributes.Add("Id", selecionadorPreCadastro.Id.ToString());
            enviarEmail.Attributes.Add("Email", selecionadorPreCadastro.Email);
            enviarEmail.Attributes.Add("Nome", selecionadorPreCadastro.Nome);
        }

        protected void lsvSelecionador_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var selecionadorEmpresa = (SelecionadorEmpresa)item.DataItem;

            var nome = (Label)item.FindControl("lblNome");
            var email = (Label)item.FindControl("lblEmail");
            var cpf = (Label)item.FindControl("lblCPF");
            var excluir = (ImageButton)item.FindControl("imbExcluir");

            nome.Text = selecionadorEmpresa.Selecionador.Usuario.Pessoa.PessoaFisica.NomeCompleto;
            cpf.Text = selecionadorEmpresa.Selecionador.Usuario.Pessoa.PessoaFisica.CPF;
            email.Text = selecionadorEmpresa.Email;
            excluir.Attributes.Add("Id", selecionadorEmpresa.Id.ToString());
        }

        protected void lnkAdicionar_Click(object sender, EventArgs e)
        {
            var selecionadorPreCadastro = new SelecionadorPreCadastro
                                              {
                                                  CPF = txtCPF.Text,
                                                  Email = txtEmail.Text,
                                                  Nome = txtNome.Text,
                                                  IdEmpresa = EmpresaLogada.Id
                                              };

            selecionadorPreCadastro.Save();

            var pessoa = new Pessoa
                             {
                                 Email = selecionadorPreCadastro.Email,
                                 PessoaFisica = new PessoaFisica { NomeCompleto = selecionadorPreCadastro.Nome }
                             };

            new Email().EnviarEmailEvento(pessoa, EmpresaLogada.Usuario.Pessoa, TipoEmail.Evento.InclusaoSelecionador);

            if (SelecionadoresPendentes == null) SelecionadoresPendentes = new List<SelecionadorPreCadastro>();

            SelecionadoresPendentes.Add(selecionadorPreCadastro);

            lsvSelecionadorPendente.OrderBy(SelecionadoresPendentes, CustomListView.Order.Ascending, "Nome");

            txtNome.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtEmail.Text = string.Empty;

            WebHelper.ShowMessageBox("Selecionador incluído com sucesso!", ref updSelecionador);
        }

        protected void imbExcluirPendente_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton)sender).Attributes["Id"]);

            SelecionadorPreCadastro selecionadorPreCadastro = (from selecionadorLinq in SelecionadoresPendentes
                                                               where selecionadorLinq.Id == id
                                                               select selecionadorLinq).FirstOrDefault();

            if (selecionadorPreCadastro != null)
            {
                selecionadorPreCadastro.Delete();
                SelecionadoresPendentes.Remove(selecionadorPreCadastro);
            }

            lsvSelecionadorPendente.DataSource = SelecionadoresPendentes;
            lsvSelecionadorPendente.DataBind();
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton)sender).Attributes["Id"]);

            new SelecionadorEmpresa { Id = id }.Inativar();

            lsvSelecionador.DataSource = new SelecionadorEmpresa { IdEmpresa = EmpresaLogada.Id }.SelecionarLista();
            lsvSelecionador.DataBind();
        }

        protected void imbEnviarEmail_Click(object sender, ImageClickEventArgs e)
        {
            string email = ((ImageButton)sender).Attributes["Email"];
            string nome = ((ImageButton)sender).Attributes["Nome"];

            var pessoa = new Pessoa
            {
                Email = email,
                PessoaFisica = new PessoaFisica { NomeCompleto = nome }
            };

            new Email().EnviarEmailEvento(pessoa, EmpresaLogada.Usuario.Pessoa, TipoEmail.Evento.InclusaoSelecionador);
            WebHelper.ShowMessageBox(Util.Translation.Translator.TranslateMessage(Messages.EmailReenviado, this), ref updSelecionador);
        }
    }
}